//
//  TSCMyGCSelectorDialog.m
//  Tsc_IOS
//
//  Created by Rio on 15-6-17.
//  Copyright (c) 2015年 idream. All rights reserved.
//

#import "TSCMyDialog.h"
#import "TSCMyGCSelectorDialog.h"
#import "TSCMyUtil.h"
#import "TSCMyGCSelector.h"
#import "TSCMyDialog.h"
#import "TSCMyCheckUtil.h"
#import "TSCMyUIUtil.h"

@implementation TSCMyGCSelectorDialog {
    TSCMyDialog * _dialog;
    UIViewController * _viewController;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self initGCSelectorDialog];
    }
    return self;
}

- (id) init {
    self = [self initWithFrame:CGRectMake(0, 0, 0, 0)];
    return self;
}

//- (id)initWithViewController:(UIViewController *)vc {
//    // 初始化（以全屏创建）
//    self = [self init];
//    
//    // 初始化属性
//    _viewController = vc;
//    
//    return self;
//}

// 当从Storyboard加载时，必须重写此方法，否则将导致类属性无法初始化
// 在Storyboard中使用自定义UIView的操作方法：
// 1. 继承UIView，新写一个子view：MyView
// 2. 在storyboard中，拖拽一个view控件，并设置其customClass为MyView
// 3. 在MyView中实现initWithCoder()方法。示例如下：
- (id) initWithCoder:(NSCoder *)aDecoder {
    // 调用父类初始化方法
    self = [super initWithCoder:aDecoder];
    if (self) {
        // 运行自定义初始化方法
        [self initGCSelectorDialog];
    }
    return self;
}

- (void) initGCSelectorDialog {
    // 初始化属性默认值
    _maxRows = 0; // 先设置为0，后续读取APP_DB中的配置
    _availableGCIds = @""; // 将null改为空字符串，以免后续程序（比如MyCheckUtil.checkGoodsClassIds()）调用时报null异常
    _selectedGCIds = @""; // 将null改为空字符串，以免后续程序（比如MyCheckUtil.checkGoodsClassIds()）调用时报null异常
    
    // 设置textField默认属性：
    // 设置borderStyle。注：设置了默认的borderStyle后，文字的padding也会自动设置
    self.borderStyle = UITextBorderStyleRoundedRect;
    // 设置字体
    self.font = [TSCMyUIUtil getSystemDefaultFont];
    
    // 添加右侧倒三角
    [TSCMyUIUtil addDownTriangleIconToView:self direction:IconDirectionRight];
    
    // 设置textField代理，用来在textField点击时，阻止键盘弹出
    self.delegate = self;
    
    // 注册事件——点击显示选择商品分类dialog
    [self addTarget:self action:@selector(selfOnClick) forControlEvents:UIControlEventTouchDown];
}

/*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.
 - (void)drawRect:(CGRect)rect
 {
 // Drawing code
 }
 */

#pragma mark 私有方法



#pragma mark 公共方法

- (void) setPickerEnabled:(BOOL)isEnabled {
    self.enabled = isEnabled;
}

- (void) initPickerDisplay_1 {
    // 如果没有指定初始时被选择的商品分类，或者从APP_DB中读取的商品分类为0（因为NOT NULL DEFAULT
    // 0），则显示“请选择商品分类”
    if ([TSCMyUtil isStringEmpty:_selectedGCIds] || [_selectedGCIds isEqualToString:@"0"]) {
        self.placeholder = NSLocalizedString(@"hint_select_goods_class", nil);
    }
    // 如果指定了初始时被选择的商品分类，则显示具体商品分类的名称
    else {
        // 构造一个临时的商品分类选择器，以便通过这个临时的商品分类选择器，获得已被选中商品分类的名称
        TSCMyGCSelector * gcSelector = [[TSCMyGCSelector alloc]init];
        gcSelector.maxRows = _maxRows;
        gcSelector.availableGCIds = _availableGCIds;
        gcSelector.selectedGCIds = _selectedGCIds;
        [gcSelector drawUI];
        [gcSelector setupViewData_1];
        
        // 显示在界面上
        // 注：获得商品分类名称的逻辑必须也运行在UI线程上，因为setupViewData_1()是运行在UI线程上的，如果这一步运行在UI线程外，会导致在setupViewData_1()运行完毕之前就尝试获得商品分类名称，获得为空
        NSString * selectedGCNameStr = [TSCMyGCSelector gcNameList2GcNameStr:[gcSelector getSelectedGCNameList]];
        self.text = selectedGCNameStr;
    }
}

/**
 * 直接将下层返回，供上层调用
 *
 * @author Rio
 * @date 2014-11-08
 */
- (NSString *) getSelectedGCIds {
    // 注：不能返回下层的值，因为mDialog中的MyGoodsClassSelector在mDialog的onCreateDialog()之前，都是null的
    // 可以直接返回本层的值，因为下层的值如果更新，则会同步更新到本层
    // return mDialog.getSelectedGCIdsStr();
    return _selectedGCIds;
}

#pragma mark target事件响应

// 当自身被点击时
- (void) selfOnClick {
    // 创建customView
    TSCMyGCSelector * gcSelector = [[TSCMyGCSelector alloc]init];
    gcSelector.maxRows = _maxRows;
    gcSelector.availableGCIds = _availableGCIds;
    gcSelector.selectedGCIds = _selectedGCIds;
    [gcSelector drawUI];
    [gcSelector setupViewData_1];
    
    // 创建dialog
    TSCMyDialog * dialog = [[TSCMyDialog alloc]init];
    dialog.customView = gcSelector;
    dialog.leftBtnText = NSLocalizedString(@"btn_confirm", nil);
    dialog.middleBtnText = NSLocalizedString(@"btn_cancel", nil);
    dialog.rightBtnText = NSLocalizedString(@"btn_dont_select", nil);
    dialog.leftBtnOnClickListener = ^(UIButton * btn, TSCMyDialog * dialog) {
        // 检查选择是否正确
        if ([TSCMyCheckUtil checkWithString:[gcSelector getSelectedGCIdsStr] regexType:RegexTypeGoodsClassIds] == NO) {
            [TSCMyUIUtil popErrWithResourceKey:@"err_select_goods_class"];
            return;
        }
        
        // 成功选择后的回调
        // 将已经成功选择的商品分类名称显示出来（一行一个）
        self.text = [TSCMyGCSelector gcNameList2GcNameStr:[gcSelector getSelectedGCNameList]];
        // 重置初始时需要选中的商品分类，以便下一次打开dialog时，能再次自动选择
        _selectedGCIds = [gcSelector getSelectedGCIdsStr];
        
        // 关闭窗口
        [dialog dismiss];
    };
    dialog.middleBtnOnClickListener = ^(UIButton * btn, TSCMyDialog * dialog) {
        [dialog dismiss];
    };
    dialog.rightBtnOnClickListener = ^(UIButton * btn, TSCMyDialog * dialog) {
        // 清除所有已经选择的商品分类行
        [gcSelector cleanSelectedRows];
        
        // 成功选择后的回调
        // 将已经成功选择的商品分类名称显示出来（一行一个）
        self.text = [TSCMyGCSelector gcNameList2GcNameStr:[gcSelector getSelectedGCNameList]];
        // 重置初始时需要选中的商品分类，以便下一次打开dialog时，能再次自动选择
        _selectedGCIds = [gcSelector getSelectedGCIdsStr];
        
        // 关闭窗口
        [dialog dismiss];
    };
    
    // 显示dialog
    [dialog show];
}

#pragma mark delegate

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    return NO; // 点击textField自身时，阻止键盘弹出
}

@end
